package com.itsense.stock.service;

import com.itsense.stock.pojo.domain.PermissionPostDomain;
import com.itsense.stock.pojo.domain.PermissionsSelectAllDomain;
import com.itsense.stock.pojo.domain.SysUserDomain;
import com.itsense.stock.pojo.domain.SysUserSelectDomain;
import com.itsense.stock.pojo.entity.SysPermission;
import com.itsense.stock.pojo.entity.SysRole;
import com.itsense.stock.pojo.entity.SysUser;
import com.itsense.stock.pojo.vo.PermissionUpdateVo;
import com.itsense.stock.vo.req.*;
import com.itsense.stock.vo.resp.LoginRespVo;
import com.itsense.stock.vo.resp.PageResult;
import com.itsense.stock.vo.resp.R;
import com.itsense.stock.vo.resp.UserRespVo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface UserService {

    /**
     * 根据用户名返回信息的接口
     * @param userName
     * @return
     */
    SysUser findByUserName(String userName);

    /**
     * 用户登录接口
     * @param vo
     * @return
     */
    R<LoginRespVo> login(LoginReqVo vo);

    /**
     * 生成用户校验码ID的方法
     * @return
     */
    R<Map> getCaptchaCode();

    /**
     * 返回访问权限列表
     * @return
     */
    R<List<SysPermission>> getPermission();

    /**
     * 返回权限查看数树
     * @return
     */
    R<List<HashMap>> getPermissionTree();

    /**
     * 通过post方法实现添加对应的权限管理对象
     * @param permissionPostDomain
     * @return
     */
    R<String> addPermission(PermissionPostDomain permissionPostDomain);

    /**
     * 更新权限管理对象
     * @param vo
     * @return
     */
    R<String> updatePermission(PermissionUpdateVo vo);

    /**
     * 通过id删除对应的用户
     * @param permissionId
     * @return
     */
    R<String> deletePermission(Long permissionId);

    /**
     * 多条件分页查询
     * @param vo
     * @return
     */
    R<PageResult<SysUserDomain>> getUserByPage(GetUserReqVo vo);

    /**
     * 添加用户
     * @param vo
     * @return
     */
    R addUser(UserReqVo vo);

    /**
     * 通过id返回用户角色信息
     * @param userId
     * @return
     */
    R<Map<String, List>> getUserRole(String userId);

    /**
     * 请求更新用户角色
     * @param vo
     * @return
     */
    R addUserRoles(AddUserRolesReqVo vo);

    /**
     * 批量删除用户信息
     * @param ids
     * @return
     */
    R deleteUser(List<Long> ids);

    /**
     * 通过用户id实现用户信息的查询
     * @param userId
     * @return
     */
    R<SysUserSelectDomain> findInfoByUserId(String userId);

    /**
     * 通过id更新用户信息
     * @param vo
     * @return
     */
    R updateByUserId(UpdateUserReqVo vo);

    /**
     * 查询角色分页信息
     * @param vo
     * @return
     */
    R<PageResult<SysRole>> getRole(GetRoleReqVo vo);

    /**
     * 返回树状结构回显数据
     * @return
     */
    R<List<PermissionsSelectAllDomain>> getPermissionsTreeAll();

    /**
     * 添加用户权限
     * @param vo
     * @return
     */
    R addRole(AddRoleReqVo vo);

    /**
     * 根据用户id查询用户信息
     * @param roleId
     * @return
     */
    R<List<String>> getRolePermission(String roleId);

    /**
     * 添加角色和角色相关权限
     * @param vo
     * @return
     */
    R updateRolePermission(UpdateRolePermissionReqVo vo);

    /**
     * 删除用户权限
     * @param roleId
     * @return
     */
    R deleteRole(String roleId);

    /**
     * 更新用户状态
     * @param roleId
     * @param status
     * @return
     */
    R updateRoleStatus(String roleId, String status);
}
